Android 图形系统(3)

您所在的位置:网站首页 安卓 gpu 模块 Android 图形系统(3)

Android 图形系统(3)

2023-08-13 16:32| 来源: 网络整理| 查看: 265

DRM框架简介

传统的Linux 显示设备驱动开发时,通常使用FB驱动架构;随着显卡性能的升级,显示覆盖(菜单层级),GPU加速,硬件光标,传统的FB架构都无法很好的支持,此外,对于多应用的访问冲突也无法很好的控制,这样的背景下,DRM应运而生

DRM 是目前主流的图形显示框架,Linux 内核中已经有Framebuffer 驱动用于管理显示设备的 Framebuffer,Framebuffer 框架也可以实现Linux 系统的显示功能,但是缺点如下:

DRM 原生支持多图层合成,FB架构原生不支持多图层合成 FB不支持VSYNC,DMA-BUF,异步更新和fence机制,DRM都支持

这些功能DRM框架都支持, 可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护

Framebuffer显示框架.png

下面是Linux graphic system 的框架,基于Wayland的Windowing system,在DRI框架下,通过两条路径(DRM和KMS),分别实现Rendering和送显两个显示步骤,注意观察 DRM 框架在其中的作用

Linux Wayland DRI 显示框架.png

Application(如3D game)根据用户动作,需要重绘界面,此时它会通过OpenGL_ES、EGL等接口,将一系列的绘图请求,提交给GPU 注意: a)OpenGL_ES、EGL的实现,可以有多种形式,这里以Mesa 3D为例,所有的3D rendering请求,都会经过该软件库,它会根据实际情况,通过硬件或者软件的方式,响应Application的rendering请求 b)当系统存在基于DRI的硬件rendering机制时,Mesa 3D会通过libGL-meas-DRI,调用DRI提供的rendering功能 c)libGL-meas-DRI会调用libdrm,libdrm会通过ioctl调用kernel态的DRI驱动,这里称作DRM(Direct Rendering Module) d)kernel的DRM模块,最终通过GPU完成rendering动作

GPU绘制完成后,将rendering的结果返回给Application。 rendering的结果是以image buffer的形式返回给应用程序。

Application将这些绘制完成的图像buffer(可能不止一个)送给Wayland compositor,Wayland compositor会控制硬件,将buffer显示到屏幕上。 Wayland compositor会搜集系统Applications送来的所有image buffers,并处理buffer在屏幕上的坐标、叠加方式后,直接通过ioctl,交给kernel KMS(kernel mode setting)模块,该模块会控制显示控制器将图像显示到具体的显示设备上。

DRM 基本概念

DRM 框架的基本流程框图如下:

drm 显示流程.png

软件角度框图:

drm 软件框图.png

DRM框架涉及到的元素很多,大致如下: KMS:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property GEM:DUMB、PRIME、Fence

下面一一介绍 libdrm: 应用层的一个动态链接库,对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装

KMS: Kernel mode setting 简而言之做两件事:更新画面 + 设置显示参数 更新画面: 显示buffer 的切换,多图层之间的合成方式,每个图层的显示位置 设置显示参数:包含 刷新率,分辨率,电源状态 休眠唤醒等等

GEM: Graphic Execution Manager,主要负责显示buffer的分配和释放,也是GPU唯一用到DRM的地方

元素 说明 CRTC 对显示buffer 进行扫描产生时序的硬件模块,通常是指 Display Controller Encoder 负责将CRTC输出的Timing 转换为外部设备需要信号的硬件模块:比如 HDMI 转换器,LVDS转换器,MIPI/DSI 转换器等 Connector 连接物理显示设备的连接器,比如 HDMI接口,LVDS 接口等,通常和 Encoder 绑定在一起 Plane 硬件图层,一个 plane 对应于一张显示buffer,有的 显示设备支持多图层显示(overlay mode),但所有的Display Controller至少要有1个plane FB Framebuffer ,单个图层的显示buffer,对应于一段显存 VBlank 软件和硬件的同步机制,LCD时序中两帧之间的垂直消隐区,软件通常使用硬件VSYNC来实现 Property DRM 中用于设置显示参数的数据结构,所有设置到显示设备的参数都可以抽象为 property Dump 表示连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景 Prime 连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景 Fence Buffer 之间的同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题

学习 drm 就是学习上面这些概念的用法和实现。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3